/**
 * 数组方法的实现
*/
// forEach  便利数组进行函数操作。不改变数组，没有返回值
function forEach(item,fn){
    for(let i=0; i<item.length; i++){
        fn(item[i])
    }
}
let arr = [1,2,3]
forEach(arr,function(item){
    console.log(item+1)
})
console.log(arr)

// 数组方法
let _arr = [1,2,3]
let _arr1 = ['asd','lianghuapai']
console.log(_arr.concat(_arr1,_arr))   // 拼接多个数组在一起，
console.log(_arr.constructor)     // 获取创建对象的原型函数
console.log(_arr.length)  // 获取数组长度
console.log(_arr.prototype)    // 在数组对象上添加属性和方法

console.log(_arr.filter(item=> item>2))  //  返回新数组并且符合过滤条件的选项
console.log(_arr.fill(4))
console.log(_arr.find(item=> item>1))   // 返回第一个符合条件的值
_arr.forEach((item,index)=>{     // forEach 没有返回项。
    console.log(item,index) 
})
console.log(Array.from('123123')[0])  // 把指定的对象变为数组
console.log(_arr.includes(1))  //  判断数组是否包含某一项
console.log(_arr.indexOf(4))   // 返回指定选项在数组中的索引值，没有为-1
console.log(Array.isArray(_arr))   // 判断是否为数组
console.log(_arr.join('|'))    // 用指定字符把数组转为字符串
console.log(_arr.map(item=>item+1))   // 返回处理好的新数组
console.log(_arr.pop(),_arr)  // 删除数组最后一项,返回删除项。改变了原数组
console.log(_arr.push(5),_arr)   // 在数组最后一项添加指定数据，返回改变后的数组长度，改变原数组
console.log(_arr.reduce((count,num)=> count+num))   // 累加数组
console.log(_arr.reverse(),_arr)   // 数组反转，改变数组
console.log(_arr.shift(),_arr)   // 删除数组第一项，并返回删除项，改变数组
console.log(_arr.unshift(5))  // 在数组的最前边追加，返回改变后的数组长度，改变原数组
console.log(_arr.slice(1,2),_arr)  //  返回截取的数组项,未改变数组
console.log(_arr.slice(1))      //  两个参数，从索引位置，截取长度为多少 后边为参数的情况下，那就是从后边长度截取 一个参数，就是从索引位置截取，一个参数为负数，那就是，截取后边某一项，
console.log(_arr.splice(1))   // 添加或者删除数组,改变原数组，返回删除数组
console.log(_arr.splice(1,1,3),_arr)   // 添加或者删除数组
console.log(_arr.splice(-1))   // 添加或者删除数组  负数，从后边删除
console.log(_arr.some(item=>item>1))   // 有符合的选项就返回true
console.log(_arr.every(item=> item>1))   // 所有选项都符合，才返回true

